import java.util.Scanner;
import java.util.*;
public class Text {
    public int getFirstUnFormedNum(int[] arr) {
        //定义一哈希set
        Set<Integer> set = new HashSet<>();
        //定义一个队列
        Deque<Integer> queue = new LinkedList<>();

        int len = arr.length;

        //要添加元素  到set里面 把  set里面的元素去重后倒入 队列
        set.add(0);
        for (int i = 0; i < len; i++) {
            for (int k : set) {
                //加入队列
                queue.offer(arr[i] +k);

            }
            while (!queue.isEmpty()) {
                //只要队列不为空 说明已经把数组的元素加进来了  就得 再次转到set里面去重 进行相加  //set只是对子集和去重
                set.add(queue.poll());
            }

        }

        //还要把0 删除
        set.remove(0);
        Object[] array = set.toArray();
        Arrays.sort(array);  // 排序
        int min = (int)array[0];  //这是Object类 要转为int类   强转
        int max = (int)array[array.length - 1];
        //然后for循环 判断输出
        for (int i = min; i <= max; i++) {
            if (!set.contains(i)) {
                return i;
            }
        }
        //走到这里 说明 [min,max]里面的数数组的子集都可以组成   则要返回  max+1
        return max+1;
    }
    public static void main(String[] args) {
        int[] arr = {3,2,4};
        Text  text = new Text();
        int ret = text.getFirstUnFormedNum(arr);
        System.out.println(ret);
    }
    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            if (n == 0) {
                break;  //退出  程序
            }
            int count = 0;
            while (n >= 2) {
                if (n % 3 == 0) {
                    n = n / 3;
                }else {
                    n = n / 3 + 1;
                }
                count++;

            }
            System.out.println(count);
        }
    }
}
